package cn.iocoder.yudao.module.tms.service.bandinfo;

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.tms.controller.admin.bandinfo.vo.BandOrderPageReqVO;
import cn.iocoder.yudao.module.tms.controller.admin.bandinfo.vo.BandOrderSaveReqVO;
import cn.iocoder.yudao.module.tms.controller.admin.bandinfo.vo.BandOrderStatsRespVO;
import cn.iocoder.yudao.module.tms.dal.dataobject.bandinfo.BandOrderDO;
import cn.iocoder.yudao.module.tms.dal.dataobject.order.OrderDO;

import jakarta.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * Band 与订单关联 Service 接口
 *
 * @author 芋道源码
 */
public interface BandOrderService {

    /**
     * 创建 Band 与订单关联
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createBandOrder(@Valid BandOrderSaveReqVO createReqVO);

    /**
     * 更新 Band 与订单关联
     *
     * @param updateReqVO 更新信息
     */
    void updateBandOrder(@Valid BandOrderSaveReqVO updateReqVO);

    /**
     * 删除 Band 与订单关联
     *
     * @param id 编号
     */
    void deleteBandOrder(Long id);

    /**
     * 获得 Band 与订单关联
     *
     * @param id 编号
     * @return Band 与订单关联
     */
    BandOrderDO getBandOrder(Long id);

    /**
     * 获得 Band 与订单关联列表
     *
     * @param ids 编号
     * @return Band 与订单关联列表
     */
    List<BandOrderDO> getBandOrderList(Collection<Long> ids);

    /**
     * 获得 Band 与订单关联分页
     *
     * @param pageReqVO 分页查询
     * @return Band 与订单关联分页
     */
    PageResult<BandOrderDO> getBandOrderPage(BandOrderPageReqVO pageReqVO);

    /**
     * 获得未绑定到指定Band的订单分页
     *
     * @param bandCode Band Code
     * @param orderKeyword 订单关键字
     * @param pageReqVO 分页参数
     * @return 订单分页
     */
    PageResult<OrderDO> getUnboundOrderPage(String bandCode, String orderKeyword, PageParam pageReqVO);

    /**
     * 查询指定 Band 下绑定的订单数量与累计金额
     *
     * @param bandCode Band Code
     * @return 订单数量与累计金额
     */
    BandOrderStatsRespVO getBandOrderStats(String bandCode);

}